package com.yyh1;

import java.util.HashSet;
import java.util.Objects;
import java.util.Scanner;

/*超市会员管理系统使用接口方法
* 1.定义超市会员信息类UserInfo，放入实体层（会员信息类中可以增加会员密码属性）
2.定义超市会员信息管理类UserInfoManager，通过一个集合实现对超市会员信息的管理，放入业务层。提示：集合选用Hashset
3.UserInfoManager类中，实现public void inital(){}方法，用于完成对超市会员信息管理系统的初始化功能（集合的初始化）
4.UserInfoManager类中，实现public void mainMenu(){}方法，用于完成功能面板的展示及功能选择
5.UserInfoManager类中，实现private void searchAll(){}方法，用于完成超市会员信息的查看功能
6.UserInfoManager类中，实现private void deleteUserInfo(){}方法，用于完成删除超市会员信息的功能
7.UserInfoManager类中，实现private void addUserInfo(){}方法，用于完成新增超市会员信息的功能
8.定义测试类Test，放入表示层；在测试类中，先初始化超市会员信息管理系统，然后调用mainMenu()方法,实现具体功能
9.编写代码过程中，尽量每完成一个功能，就对其进行测试*/
public class Test2 {
    public static void main(String[] args) {
        UserInfoManager manager = new UserInfoManagerImpl();
        manager.inital();
        manager.mainMenu();
    }
}
class UserInfo {
    //属性
    //会员编号
    private String id;
    //会员姓名
    private String name;
    //会员密码
    private String password;
    //会员积分
    private int prints;
    //无参构造方法
    public UserInfo() {
    }
    //有参构造方法
    public UserInfo(String id, String name, String password, int prints) {
        this.id = id;
        this.name = name;
        this.prints = prints;
        this.password = password;
    }


    //setter和getter方法
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getPrints() {
        return prints;
    }

    public void setPrints(int prints) {
        this.prints = prints;
    }
    //equals和hashCode方法
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        UserInfo userInfo = (UserInfo) o;
        return prints == userInfo.prints && Objects.equals(id, userInfo.id) && Objects.equals(name, userInfo.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id, name, prints);
    }
    //toString方法
    @Override
    public String toString() {
        return "UserInfo{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ",password=" + password +
                ", prints=" + prints +
                '}';
    }
}
//接口类型
interface UserInfoManager {
    void inital();
    void mainMenu();
    void searchAll();
    void deleteUserInfo();
    void addUserInfo();
}
//超市会员信息管理类
class UserInfoManagerImpl implements UserInfoManager {
    private HashSet<UserInfo> userInfoSet;
    private Scanner scanner;
    public UserInfoManagerImpl() {
        userInfoSet = new HashSet<>();
        scanner = new Scanner(System.in);
    }
    @Override
    public void inital() {
        userInfoSet.add(new UserInfo("1", "张三", "123456", 1000));
        userInfoSet.add(new UserInfo("2", "李四", "123456", 1000));
        userInfoSet.add(new UserInfo("3", "王五", "123456", 1000));
        userInfoSet.add(new UserInfo("4", "赵六", "123456", 1000));
        System.out.println("初始化成功！");
    }
    @Override
    public void mainMenu() {
        while (true) {
            System.out.println("==========超市会员信息管理系统==========");
            System.out.println("1.查看所有会员信息");
            System.out.println("2.删除会员信息");
            System.out.println("3.添加会员信息");
            System.out.println("4.退出");
            System.out.println("请选择：");
            Scanner scanner = new Scanner(System.in);
            int choice = scanner.nextInt();
            switch (choice) {
                case 1:
                    searchAll();
                    break;
                case 2:
                    deleteUserInfo();
                    break;
                case 3:
                    addUserInfo();
                    break;
                case 4:
                    System.out.println("退出成功！");
                    return;
                default:
                    System.out.println("输入错误！请重新输入！");
            }
        }
    }
    @Override
    //查看所有会员信息
    public void searchAll() {
        if (userInfoSet.size() == 0) {
            System.out.println("当前没有会员信息！");
        } else {
            for (UserInfo userInfo : userInfoSet) {
                System.out.println(userInfo);
            }
        }
    }
    @Override
    //删除会员信息
    public void deleteUserInfo() {
        System.out.println("\n======= 删除会员信息 =======");
        searchAll();

        System.out.print("请输入要删除的会员编号：");
        String id = scanner.next();
        scanner.nextLine(); // 消耗掉next()留下的换行符

        UserInfo userToDelete = getIndex(id);
        if (userToDelete == null) {
            System.out.println("未找到ID为" + id + "的会员！");
            return;
        }

        System.out.println("找到会员信息: " + userToDelete);
        System.out.print("确认删除吗？(Y-是/N-否): ");
        String confirm = scanner.nextLine();

        if (confirm.equalsIgnoreCase("Y")) {
            userInfoSet.remove(userToDelete);
            System.out.println("删除成功！");
            System.out.println("删除后的所有会员信息:");
            searchAll();
        } else {
            System.out.println("已取消删除操作");
        }
    }
    @Override
    //添加会员信息
    public void addUserInfo() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入会员编号：");
        String id = scanner.next();
        if (checkId(id)) {
            System.out.println("会员编号已存在！");
            return;
        }
        System.out.println("请输入会员姓名：");
        String name = scanner.next();
        System.out.println("请输入会员密码：");
        String password = scanner.next();
        System.out.print("请输入初始积分: ");
        int points;
        try {
            points = Integer.parseInt(scanner.nextLine());
        } catch (NumberFormatException e) {
            System.out.println("积分必须为数字！");
            return;
        }

        UserInfo newUser = new UserInfo(id, name, password, points);
        userInfoSet.add(newUser);
        System.out.println("新增会员成功！");
        System.out.println("新增会员信息: " + newUser);
    }
    //辅助方法：根据ID查找会员
    private UserInfo getIndex(String id) {
        for (UserInfo userInfo : userInfoSet) {
            if (userInfo.getId().equals(id)) {
                return userInfo;
            }
        }
        return null;
    }
    //辅助方法：检查id是否存在
    private boolean checkId(String id) {
    return getIndex(id) != null;
    }
}
